﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Gestion.Ui;
using Gestion.Domain.Entities;

namespace Gestion.Web.Empresa.Riesgo
{
    public partial class AddRiesgo : BasePage
    {
        #region Properties

        private RiesgoEntity Riesgo
        {
            get
            {
                return (RiesgoEntity)ViewState["riesgo"];
            }
            set
            {
                ViewState["riesgo"] = value;
            }
        }

        protected IList<DetalleRiesgoEntity> ListaDetallesRiesgo
        {
            get
            {
                return (IList<DetalleRiesgoEntity>)ViewState["detalleRiesgosCollection"];
            }
            set
            {
                ViewState["detalleRiesgosCollection"] = value;
            }
        }

        #endregion

        #region Control Events

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Riesgo = new RiesgoEntity();
                ListaDetallesRiesgo = new List<DetalleRiesgoEntity>();
            }
        }

        protected void WizardRiesgo_FinishButtonClick(object sender, WizardNavigationEventArgs e)
        {
            BindToModel();
            DoSave();
            GoList();
        }
        
        protected void btnAddOpcionRiesgo_Click(object sender, EventArgs e)
        {
            DetalleRiesgoEntity detalleRiesgo = BindToDetalleRiesgo();
            ListaDetallesRiesgo.Add(detalleRiesgo);
            ListBoxOpcionesRiesgo.DataSource = ListaDetallesRiesgo;
            ListBoxOpcionesRiesgo.DataValueField = "Id";
            ListBoxOpcionesRiesgo.DataTextField = "Nombre";
            ListBoxOpcionesRiesgo.DataBind();

            ClearDetalleRiesgoScreen();
        }

        protected void btnDelOpcionRiesgo_Click(object sender, EventArgs e)
        {
            if (ListBoxOpcionesRiesgo.SelectedIndex != -1)
            {
                ListaDetallesRiesgo.RemoveAt(ListBoxOpcionesRiesgo.SelectedIndex);
                ListBoxOpcionesRiesgo.Items.Remove(ListBoxOpcionesRiesgo.SelectedItem);
            }
        }

        private void ClearDetalleRiesgoScreen()
        {
            TxtNombreOpcionRiesgo.Value = "";
            TxtValorOpcionRiesgo.Value = 0;
        }

        private void GoList()
        {
            Response.Redirect(ServiceManager.WebformNavigation.RiesgoList());
        
        }

        #endregion

        #region binding

        private void BindToModel()
        {
            Riesgo.Nombre = TxtNombreRiesgo.Value;
            Riesgo.Descripcion = TxtDescripcionRiesgo.Value;
        }

        private DetalleRiesgoEntity BindToDetalleRiesgo()
        {
            DetalleRiesgoEntity detalleRiesgo = new DetalleRiesgoEntity();

            detalleRiesgo.Nombre = TxtNombreOpcionRiesgo.Value;
            detalleRiesgo.Valor = (Int16)TxtValorOpcionRiesgo.Value;

            return detalleRiesgo;
        }

        #endregion

        #region Service-based Actions

        public void DoSave()
        {
            Riesgo.DetalleRiesgoCollection = ListaDetallesRiesgo;
            ServiceManager.RiesgoService.CreateRiesgoAndDetalles(Riesgo);
        }

        #endregion
    }
}
